/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package mantenimiento.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Locale;

import mantenimiento.excepcion.DAOExcepcion;
import mantenimiento.modelo.Mantenimiento;
import mantenimiento.util.ConexionBD;

public class MantenimientoDAO extends BaseDAO {

    public Mantenimiento obtenerMantenimiento(int idMantenimiento) throws DAOExcepcion {
        Mantenimiento vo = new Mantenimiento();
        Connection con = null;
        PreparedStatement stmt = null;
        ResultSet rs = null;
        try {
            String query = "select * from mantenimiento where idMantenimiento=" + idMantenimiento;
            con = ConexionBD.obtenerConexion();
            stmt = con.prepareStatement(query);
            //stmt.setInt(1, idMantenimiento);

            rs = stmt.executeQuery();
            if (rs.next()) {
                vo.setIdMantenimiento(rs.getInt(1));
                vo.setIdusuario(rs.getString(2));
                vo.setEquipo_idequipo(rs.getInt(4));
                vo.setFecha_ini(rs.getString(5));
                vo.setFecha_fin(rs.getString(6));
                vo.setEstado(rs.getString(7));
                vo.setDescripcion(rs.getString(8));
                vo.setTipo_mant(rs.getString(9));
                vo.setCriticidad(rs.getString(10));
            }
        } catch (SQLException e) {
            System.err.println(e.getMessage());
            throw new DAOExcepcion(e.getMessage());
        } finally {
            this.cerrarResultSet(rs);
            this.cerrarStatement(stmt);
            this.cerrarConexion(con);
        }
        return vo;
    }

    private static boolean isFechaValida(String fechax) {
        try {
            SimpleDateFormat formatoFecha = new SimpleDateFormat("dd/MM/yyyy",
                    Locale.getDefault());
            formatoFecha.setLenient(false);
            formatoFecha.parse(fechax);
        } catch (ParseException e) {
            return false;
        }

        return true;
    }

    public Collection<Mantenimiento> buscarReportes(int id)
            throws DAOExcepcion {
//		String query = "select herramienta.*,grupo.nombre as ngrupo from herramienta,grupo where herramienta.nombre like ? and grupo.idgrupo=herramienta.idgrupo";

        String query = "";
        if (id != -1) {
            query = "select idMantenimiento,usuario_id_usuario,equipo_idequipo,fecha_inicio,fecha_fin,estado,descripcion,tipo_mantenimiento,criticidad from Mantenimiento where idMantenimiento = " + id;

        } else {
            query = "select idMantenimiento,usuario_id_usuario,equipo_idequipo,fecha_inicio,fecha_fin,estado,descripcion,tipo_mantenimiento,criticidad "
                    + "from Mantenimiento";
        }

        Collection<Mantenimiento> c = new ArrayList<Mantenimiento>();
        System.out.println(id);
        Connection con = null;
        PreparedStatement stmt = null;
        ResultSet rs = null;
        try {
            con = ConexionBD.obtenerConexion();
            stmt = con.prepareStatement(query);
            //stmt.setInt(1,id);
            rs = stmt.executeQuery();
            while (rs.next()) {
                Mantenimiento vo = new Mantenimiento();
                vo.setIdMantenimiento(rs.getInt(1));
                vo.setIdusuario(rs.getString(2));
                vo.setEquipo_idequipo(rs.getInt(3));
                vo.setFecha_ini(rs.getString(4));
                vo.setFecha_fin(rs.getString(5));
                String h = rs.getString(6);
                if (h.equals("a")) {
                    vo.setEstado("Activo");
                } else if (h.equals("p")) {
                    vo.setEstado("Pendiente");
                } else {
                    vo.setEstado("Ejecutado");
                }
                vo.setDescripcion(rs.getString(7));
                String j = rs.getString(8);
                if (j.equals("0")) {
                    vo.setTipo_mant("No elejido");
                } else if (j.equals("1")) {
                    vo.setTipo_mant("Preventivo");
                } else {
                    vo.setTipo_mant("Correctivo");
                }
                vo.setCriticidad(rs.getString(9));
                c.add(vo);
            }
        } catch (SQLException e) {
            System.err.println(e.getMessage());
            throw new DAOExcepcion(e.getMessage());
        } finally {
            this.cerrarResultSet(rs);
            this.cerrarStatement(stmt);
            this.cerrarConexion(con);
        }
        return c;
    }

    public Mantenimiento insertar(Mantenimiento vo) throws DAOExcepcion {
        String query = "INSERT INTO Mantenimiento (usuario_id_usuario,equipo_idequipo,Detalle_Mantenimiento_idDetalle_Mantenimiento,fecha_inicio,fecha_fin,estado,descripcion,tipo_mantenimiento,criticidad) VALUES (?,?,?,?,?,?,?,?,?)";
        String query2 = "INSERT INTO Detalle_mantenimiento (fecha) VALUES(?)";
        Connection con = null;
        PreparedStatement stmt = null;

        ResultSet rs = null;
        try {

            con = ConexionBD.obtenerConexion();
            stmt = con.prepareStatement(query2);
            stmt.setString(1, vo.getFecha_fin());
            int h = stmt.executeUpdate();
            if (h != 1) {
                throw new SQLException("No se pudo insertar");
            }

            int y = 0;
            query2 = "SELECT LAST_INSERT_ID()";
            stmt = con.prepareStatement(query2);
            rs = stmt.executeQuery();

            if (rs.next()) {
                y = rs.getInt(1);
            }
            System.out.println(y);
            vo.setDetalle_Mantenimiento_idDetalle_Mantenimiento(y);

            stmt = null;
            rs = null;

            stmt = con.prepareStatement(query);
            stmt.setString(1, vo.getIdusuario());
            stmt.setInt(2, vo.getEquipo_idequipo());
            stmt.setInt(3, vo.getDetalle_Mantenimiento_idDetalle_Mantenimiento());
            stmt.setString(4, vo.getFecha_ini());
            stmt.setString(5, vo.getFecha_fin());
            stmt.setString(6, vo.getEstado());
            stmt.setString(7, vo.getDescripcion());
            stmt.setString(8, vo.getTipo_mant());
            stmt.setString(9, vo.getCriticidad());

            int i = stmt.executeUpdate();
            if (i != 1) {
                throw new SQLException("No se pudo insertar");
            }
            // Obtener el ultimo id
            int id = 0;
            query = "SELECT LAST_INSERT_ID()";
            stmt = con.prepareStatement(query);

            rs = stmt.executeQuery();
            if (rs.next()) {
                id = rs.getInt(1);
            }
            vo.setIdMantenimiento(id);


        } catch (SQLException e) {
            System.err.println(e.getMessage());
            throw new DAOExcepcion(e.getMessage());
        } finally {
            this.cerrarResultSet(rs);
            this.cerrarStatement(stmt);
            this.cerrarConexion(con);
        }
        return vo;
    }

    public void eliminar(int idMantenimientos) throws DAOExcepcion {
        String query = "DELETE FROM Mantenimiento WHERE idMantenimiento=?";
        Connection con = null;
        PreparedStatement stmt = null;
        try {
            con = ConexionBD.obtenerConexion();
            stmt = con.prepareStatement(query);
            stmt.setInt(1, idMantenimientos);
            int i = stmt.executeUpdate();
            if (i != 1) {
                throw new SQLException("No se pudo eliminar");
            }
        } catch (SQLException e) {
            System.err.println(e.getMessage());
            throw new DAOExcepcion(e.getMessage());
        } finally {
            this.cerrarStatement(stmt);
            this.cerrarConexion(con);
        }
    }
    /*
    public Herramienta actualizar(Herramienta vo) throws DAOExcepcion {
    String query = "update herramientas set nombre=?,marca=?,modelo=?,dimensiones=?,fabricante=?,idgrupo=? where idHerramientas=?";
    Connection con = null;
    PreparedStatement stmt = null;
    try {
    con = ConexionBD.obtenerConexion();
    stmt = con.prepareStatement(query);
    stmt.setString(1, vo.getNombre());
    stmt.setString(2, vo.getMarca());
    stmt.setString(3, vo.getModelo());
    stmt.setString(4, vo.getDimensiones());
    stmt.setString(5, vo.getFabricante());
    //			stmt.setString(6, vo.getImagen());
    stmt.setInt(6, vo.getIdgrupo());
    stmt.setInt(7, vo.getIdherramienta());
    int i = stmt.executeUpdate();
    if (i != 1) {
    throw new SQLException("No se pudo actualizar");
    }
    } catch (SQLException e) {
    System.err.println(e.getMessage());
    throw new DAOExcepcion(e.getMessage());
    } finally {
    this.cerrarStatement(stmt);
    this.cerrarConexion(con);
    }
    return vo;
    }
     *
     */
}

